package com.vvv.designpattern.behavioralpattern;

/**
 * @author vvv
 * @date 2023-11-13 15 38
 * discription 模板方法模式
 *
 */
public class TemplateMethod01 {
    public static void main(String[] args) {
        /**
         * 在抽象父类中定义处理流程的框架，在子类中实现具体的处理
         * 下面我们以处理HTTP请求的模板方法模式为例子
         */
        HttpRequestProcessor httpRequestProcessor = new CustomHttpRequestProcessor();
        httpRequestProcessor.processHttpRequest();
    }
}
abstract class HttpRequestProcessor {

    // 模板方法，定义了处理HTTP请求的流程
    public final void processHttpRequest() {
        parseRequest();
        validateRequest();
        processRequest();
        sendResponse();
    }

    // 基本方法，由子类实现，用于解析HTTP请求
    protected abstract void parseRequest();

    // 基本方法，由子类实现，用于验证HTTP请求
    protected abstract void validateRequest();

    // 基本方法，由子类实现，用于处理HTTP请求
    protected abstract void processRequest();

    // 基本方法，由子类实现，用于发送HTTP响应
    protected abstract void sendResponse();
}
// 用户自定义的HTTP请求处理器，继承自HttpRequestProcessor
class CustomHttpRequestProcessor extends HttpRequestProcessor {

    @Override
    protected void parseRequest() {
        System.out.println("Parsing HTTP request");
        // 具体的解析逻辑
    }

    @Override
    protected void validateRequest() {
        System.out.println("Validating HTTP request");
        // 具体的验证逻辑
    }

    @Override
    protected void processRequest() {
        System.out.println("Processing HTTP request");
        // 具体的处理逻辑
    }

    @Override
    protected void sendResponse() {
        System.out.println("Sending HTTP response");
        // 具体的响应发送逻辑
    }
}
